import { useCallback, useState } from "react";
// 导入新的 API 函数
import { checkBugs, checkBugsFromRepo } from "../lib/api/bug";
import type { BugReport } from "../types/bug";
import { UI_STRINGS } from "../config/strings";

export function useBugCheck() {
  const [files, setFiles] = useState<File[]>([]);
  const [url, setUrl] = useState(""); // 新增：URL 状态
  const [report, setReport] = useState<BugReport | null>(null);
  const [loading, setLoading] = useState(false);

  const handleFileUpload = useCallback(
    (e: React.ChangeEvent<HTMLInputElement>) => {
      if (!e.target.files) return;
      const selectedFiles = Array.from(e.target.files);
      setFiles(selectedFiles);
      setUrl(""); // 互斥：选择文件时清空 URL
      setReport(null);
    },
    []
  );

  // 新增：URL 输入处理
  const handleUrlChange = useCallback(
    (e: React.ChangeEvent<HTMLInputElement>) => {
      setUrl(e.target.value);
      setFiles([]); // 互斥：输入 URL 时清空文件
      setReport(null);
    },
    []
  );

  const runCheck = useCallback(async () => {
    const hasUrl = url.trim().length > 0;
    const hasFiles = files.length > 0;

    // 更新：检查两者是否都为空
    if (!hasUrl && !hasFiles) {
      alert(UI_STRINGS.alertUploadOrUrlFirst); // 使用新的提示字符串
      return;
    }

    setLoading(true);
    try {
      let data: BugReport;
      
      // 更新：根据输入类型调用不同 API
      if (hasUrl) {
        data = await checkBugsFromRepo(url);
      } else {
        data = await checkBugs(files);
      }

      if (!data || !data.issues) {
        alert("检测完成，但未返回结果。请检查后端日志。");
      }
      setReport(data);
    } catch (err: unknown)
    {
      console.error("bug-check error", err);
      // 改进错误提示
      const msg = err instanceof Error ? err.message : String(err);
      alert(`检测失败：${msg}`);
    } finally {
      setLoading(false);
    }
  }, [files, url]); // 依赖项中加入 url

  return {
    files,
    url, // 导出 url 状态
    report,
    loading,
    handleFileUpload,
    handleUrlChange, // 导出新函数
    runCheck,
  } as const;
}